public class TongdaoRq {

    public static void Jiexi(String shuju) {

        if (shuju.contains("910501041A")) {
            System.out.println("发送SetMMi指令");
        } else if (shuju.contains("400391600100")) {
            System.out.println("发送EventReport指令");


        } else {
            System.out.println("通道指令");
            String yingda = shuju.substring(0, 2);
            System.out.println("是否需要应答为01需要 00不需要:" + yingda);
            String yuanyu = shuju.substring(2, shuju.length());
            System.out.println("原语为:" + yuanyu);

            String MAC = shuju.substring(2, 10);
            System.out.println("MAC为:" + MAC);
            String MACLLC = shuju.substring(10, 12);
            System.out.println("MAC控制域为:" + MACLLC);
            String llc = shuju.substring(12, 14);
            System.out.println("LLC控制域为:" + llc);
            String duanzitou = shuju.substring(14, 16);
            System.out.println("段字头为:" + duanzitou);


            String TAPDUptional = shuju.substring(16, 18);
            System.out.println("T-APDU&0ptional为:" + TAPDUptional);
            String DID = shuju.substring(18, 20);
            System.out.println("DID为:" + DID);

            String ActionType = shuju.substring(20, 22);
            System.out.println("ActionType为:" + ActionType);

            String ChannelRq = shuju.substring(22, 24);
            System.out.println("ChannelRq为:" + ChannelRq);

            String ChannalID = shuju.substring(24, 26);
            System.out.println("channelID此值01为发送到卡的,02为发送到OBU的指令，其他可能为私有指令,当前channelID为:" + ChannalID);
            //指令为第几个+长度+数据
            String zhiling = shuju.substring(26, shuju.length() );
            System.out.println("（指令为第几个1字节+长度1字节+数据N字节）指令 为:" + zhiling);


            if (zhiling.contains("00A40000023F00")) {
                System.out.println("命令意思为:进3F00目录，读写卡和OBU都会进这个目录");
            } else if (zhiling.contains("00A4000002DF01")) {
                System.out.println("命令意思为:进DF01目录，应该是要读写车辆信息了");
            } else if (zhiling.contains("00A40000021001")) {
                System.out.println("命令意思为:选1001目录，下一步为读15文件或者写15文件");
            } else if (zhiling.contains("00B095002B")) {
                System.out.println("命令意思为:读15文件，读取用户卡信息，上一步应为进1001目录");
            } else if (zhiling.contains("00B0960037")) {
                System.out.println("命令意思为:读16文件");
            }
            else if (zhiling.contains("00200000")) {
                System.out.println("命令意思为:读18文件,验证PIN");
            }
            else if (zhiling.contains("00B201C417")) {
                System.out.println("命令意思为:读18文件的第一条");
            }
            else if (zhiling.contains("00B201CC2B")) {
                System.out.println("命令意思为:读19文件，读取复合消费专用文件");
            } else if (zhiling.contains("00B081001B")) {
                System.out.println("命令意思为:读EF01文件，返回27字节系统信息");

            } else if (zhiling.contains("0084000008")) {
                System.out.println("命令意思为:取8字节随机数，拿这个随机数给PSAM算MAC，读OBU车辆信息会用到");
            } else if (zhiling.contains("00B400000A")) {
                System.out.println("命令意思为:读车辆信息");
                System.out.println("读车辆信息：00B400000A+8字节随机数+3B(读取车辆文件长度) +00(密钥版本:00--非国密，41--国密)");
            } else if (zhiling.contains("805001")) {
                System.out.println("命令意思为:消费初始化");
                System.out.println("消费初始化：805001+交易类型（\"01\"或\"02\"）+0B（后面数据长度）+秘钥索引（1字节） +交易金额（4字节）+终端机编号（6字节）");
            } else if (zhiling.contains("805401000F")) {
                System.out.println("命令意思为:消费写卡，IC扣款");
                System.out.println("消费写卡:805401000F+终端交易序号（4字节）+交易日期（4字节）+交易时间（3字节）+MAC1（4字节）");

            } else if (zhiling.contains("0084000004")) {
                System.out.println("命令意思为:取4字节随机数，拿这个随机数给PSAM算MAC，写系统和写车辆都会用到");
            }
            else if (zhiling.contains("805C000204")) {
                System.out.println("命令意思为:读余额");
            }


            else if (zhiling.contains("04D6")) {
                System.out.println("写二进制文件");
                System.out.println("04D695**/04D681**,95和81为短文件标识符，95为用户卡0015文件，96为用户卡0016文件，写OBU系统信息和卡都用81");
//
                System.out.println("（写系统信息）写系统信息的前提是进了EF01目录，然后执行命令");
                System.out.println("命令意思为:更新文件，包括写系统，例如04D6 81 1A 05 0153D4A58B ，十六进制05转为10字节为05,十六进制1A转为10字节为26，意思为从26开始写5字节的数据");

                System.out.println("（写车辆信息）写车辆信息的前提是进了DF01,再进EF01目录，然后执行命令");
                System.out.println("命令意思为:更新文件，包括写车辆，例如04D6 81 00 53 + 79 字节车辆信息 + 4 字节 MAC ，十六进制53转为10字节为83,意思为从0开始写83字节的数据");


            } else if (zhiling.contains("04DC")) {
                System.out.println("命令意思为:写记录文件");
            }else{
                System.out.println("不识别该指令或者私有指令");

                if (zhiling.contains("01030B01")){
                    System.out.println("命令意思为:获取OBU版本号");
                } else if (zhiling.contains("0103A20000")) {
                    System.out.println("命令意思为:读取KL15状态");
                } else if (zhiling.contains("0103A20200")) {
                    System.out.println("命令意思为:打开蓝牙");
                } else if (zhiling.contains("0103A20300")) {
                    System.out.println("命令意思为:关闭蓝牙");
                } else if (zhiling.contains("0103A20400")) {
                    System.out.println("命令意思为:读蓝牙MAC+蓝牙名称");
                } else if (zhiling.contains("0103A20500")) {
                    System.out.println("命令意思为:读取车辆VIN码");
                }else if (zhiling.contains("0114A20611")) {
                    System.out.println("命令意思为:读取车辆VIN码");
                }

            }
        }


    }
}
